//#include<iostream>
//using namespace std;
//void Swap(int& left, int& right)
//{
//	int temp = left;
//	left = right;
//	right = temp;
//}
//void Swap(double& left, double& right)
//{
//	double temp = left;
//	left = right;
//	right = temp;
//}
//void Swap(char& left, char& right)
//{
//	char temp = left;
//	left = right;
//	right = temp;
//}
//int main()
//{
//	int a = 1, b = 3;
//	Swap(a, b);
//	cout << "a = " << a << " b = " << b << endl;
//
//	double d1 = 0.12, d2 = 0.21;
//	Swap(d1, d2);
//	cout << "d1 = " << d1 << " d2 = " << d2 << endl;
//
//	char c1 = 'a', c2 = 'b';
//	Swap(c1, c2);
//	cout << "c1 = " << c1 << " c2 = " << c2 << endl;
//
//	return 0;
//}

//#include<iostream>
//using namespace std;
//template<typename T>
//void Swap(T& left, T& right)
//{
//	T temp = left;
//	left = right;
//	right = temp;
//}
//
//template<typename T1,typename T2>
//void print(T1& a,T2& b)
//{
//	cout << a << " " << b;
//}
//int main()
//{
//	int a = 1, b = 3;
//	Swap(a, b);
//	cout << "a = " << a << " b = " << b << endl;
//
//	double d1 = 11.2, d2 = 12.1;
//	Swap(d1, d2);
//	cout << "d1 = " << d1 << " d2 = " << d2 << endl;
//
//	char c1 = 'a', c2 = 'b';
//	Swap(c1, c2);
//	cout << "c1 = " << c1 << " c2 = " << c2 << endl;
//
//	print(a, b);
//	return 0;
//}

//#include<iostream>
//using namespace std;
//template<typename T>
//void Swap(T& left, T& right)
//{
//	T temp = left;
//	left = right;
//	right = temp;
//}
//int main()
//{
//	int a = 1, b = 3;
//	double d1 = 11.2, d2 = 12.1;
//	char c1 = 'a', c2 = 'b';
//
//	Swap(a, b);
//	Swap(d1, d2);
//	Swap(c1, c2);
//
//	return 0;
//}

//#include<iostream>
//using namespace std;
//template<class T>
//T Add(const T& left, const T& right)
//{
//	return left + right;
//}
//int main()
//{
//	int a1 = 3, a2 = 5;
//	double d1 = 10.1, d2 = 12.2;
//	Add(a1, int(d1)); //强制类型转换
//	Add<int>(a1, d1); //模板参数显式实例化，下面会讲到
//	return 0;
//}

//#include<iostream>
//using namespace std;
//template<class T>
//T Add(const T& left, const T& right)
//{
//	return left + right;
//}
//template int Add<int>(const int& left, const int& right);
//int main()
//{
//	int a1 = 3, a2 = 5;
//	double d1 = 10.1, d2 = 12.2;
//	//显式实例化
//	cout << Add<int>(a1, d1) << endl;
//	cout << Add<int>(d1, d2) << endl;
//	cout << Add<double>(a2, d2) << endl;
//	cout << Add<double>(a1, a2) << endl;
//
//	return 0;
//}

//#include<iostream>
//using namespace std;
//template<class T>
//void Test1(T t)
//{
//	cout << t << endl;
//}
//
//template<class T> //在不同函数模板中可以使用相同的模板参数名
//void Test2(T t)
//{
//	cout << t << endl;
//}
//int main()
//{
//	Test1(3);
//	Test2(5);
//	return 0;
//}

//#include<iostream>
//using namespace std;
////函数模板的声明
//template<class T>
//void Test(T t); 
//
////函数模板的定义
//template<class U>
//void Test(U t) 
//{
//	cout << t << endl;
//}
//int main()
//{
//	Test(10);
//	return 0;
//}

//#include<iostream>
//using namespace std;
//
//template<typename T,class U> //两个关键字可以混用
//void Test1(T t, U u){}
//
//template<typename T,U> //错误，每个模板参数前都要有关键字typename或class修饰
//void Test2(T t,U u){}
//
//int main()
//{
//	return 0;
//}

